package com.eian.boot.module.system.log.model.entity;

import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 系统操作日志表 实体类
 *
 * @author alex.meng
 * @since 1.0.0
 */
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
@Table(value = "t_sys_operation_log")
public class SysOperationLogEntity implements Serializable {

    /**
     * 主键ID
     */
    @Id(keyType = KeyType.Auto)
    private Long id;

    /**
     * 创建时间
     */
    @Column(value = "created_at", onInsertValue = "now()")
    private LocalDateTime createdAt;

    /**
     * 链路追踪ID
     */
    @Column(value = "trace_id")
    private String traceId;

    /**
     * 操作模块
     */
    @Column(value = "module")
    private String module;

    /**
     * 业务类型：1-新增，2-修改，3-删除，4-查询，5-导出，6-导入，7-授权，8-强退，9-清空，10-其他
     */
    @Column(value = "business_type")
    private Integer businessType;

    /**
     * 业务描述
     */
    @Column(value = "business_desc")
    private String businessDesc;

    /**
     * 请求方式：GET、POST、PUT、DELETE等
     */
    @Column(value = "request_method")
    private String requestMethod;

    /**
     * 请求URL
     */
    @Column(value = "request_url")
    private String requestUrl;

    /**
     * 方法名称
     */
    @Column(value = "method_name")
    private String methodName;

    /**
     * 方法类名
     */
    @Column(value = "method_class")
    private String methodClass;

    /**
     * 操作类别：1-后台用户，2-手机端用户，3-其他
     */
    @Column(value = "operator_type")
    private Integer operatorType;

    /**
     * 操作人员ID
     */
    @Column(value = "operator_id")
    private Long operatorId;

    /**
     * 操作人员名称
     */
    @Column(value = "operator_name")
    private String operatorName;

    /**
     * 操作人员部门ID
     */
    @Column(value = "dept_id")
    private Long deptId;

    /**
     * 操作人员部门名称
     */
    @Column(value = "dept_name")
    private String deptName;

    /**
     * 请求IP地址
     */
    @Column(value = "request_ip")
    private String requestIp;

    /**
     * IP归属地
     */
    @Column(value = "request_location")
    private String requestLocation;

    /**
     * 请求参数（Query参数）
     */
    @Column(value = "request_param")
    private String requestParam;

    /**
     * 请求体（Body参数）
     */
    @Column(value = "request_body")
    private String requestBody;

    /**
     * 返回结果
     */
    @Column(value = "response_result")
    private String responseResult;

    /**
     * 操作状态：1-成功，0-失败
     */
    @Column(value = "status")
    private Integer status;

    /**
     * 错误消息
     */
    @Column(value = "error_msg")
    private String errorMsg;

    /**
     * 执行耗时（毫秒）
     */
    @Column(value = "cost_time")
    private Long costTime;

    /**
     * 用户代理
     */
    @Column(value = "user_agent")
    private String userAgent;

    /**
     * 浏览器类型
     */
    @Column(value = "browser")
    private String browser;

    /**
     * 操作系统
     */
    @Column(value = "os")
    private String os;
}


